home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / applications / misc / timekeep.lha / TimeKeep / Rexx / InvoiceText.rexx < prev    next >
OS/2 REXX Batch file  |  1994-10-17  |  5KB  |  219 lines

  1. /*
  2.         $VER: InvoiceText (17 Oct 1994)
  3. */
  4.  
  5. arg iNameCode
  6.  
  7. options results
  8.  
  9. /* Initialize */
  10. Quote = '22'x
  11. cInvoice = 0
  12.  
  13. DataPath = "S:TimeKeep/"
  14.  
  15. if iNameCode = "" then do
  16.     Say ""
  17.     Say "ERROR: No Client Code"
  18.     Say ""
  19.     exit
  20. end
  21.  
  22. /* Read Time Data */
  23. if ~ open('Time', DataPath||iNameCode||".time", 'R') then do
  24.     Say ""
  25.     Say "ERROR: .time NOT FOUND"
  26.     Say ""
  27.     exit
  28. end
  29.  
  30. t = readln('Time')
  31. parse var t '"'Client.NameCode'","'Client.Name'"'
  32.  
  33. /* Collate */
  34. Projects = "|"; nProjects = 0 ; Expenses = 0; Work = 0
  35. do while ~eof('Time')
  36.     t = readln('Time')
  37.     parse var t '"'tType'","'tProject'",'tInfo
  38.  
  39.     if tInfo == "" then leave
  40.  
  41.     if index(Projects, "|"tProject"|") = 0 then do
  42.         /* Project not found */
  43.         Projects = Projects||tProject"|"
  44.         nProjects = nProjects + 1
  45.         Projects.nProjects.Name = tProject
  46.  
  47.         if tType = "T" then do
  48.             Projects.nProjects.count = 1
  49.             Expenses.nProjects.count = 0
  50.             end
  51.         else do
  52.             Projects.nProjects.count = 0
  53.             Expenses.nProjects.count = 1
  54.         end
  55.  
  56.         cProject = nProjects; n = 1
  57.         end
  58.     else do
  59.         /* Project exists */
  60.         do lp = 1 to nProjects
  61.             if Projects.lp.Name = tProject then leave
  62.         end
  63.         cProject = lp
  64.  
  65.         if tType = "T" then do
  66.             Projects.lp.count = Projects.lp.count + 1
  67.             n = Projects.lp.count
  68.             end
  69.         else do
  70.             Expenses.lp.count = Expenses.lp.count + 1
  71.             n = Expenses.lp.count
  72.         end
  73.     end
  74.  
  75.     if tType = "T" then do
  76.         Projects.cProject.n.Info = tInfo
  77.         Work = 1
  78.         end
  79.     else do
  80.         Expenses.cProject.n.Info = tInfo
  81.         Expenses = 1
  82.     end
  83. end
  84.  
  85. call close('Time')
  86.  
  87. if nProjects = 0 then do
  88.     Say ""
  89.     Say "ERROR: NO Logged Time or Expenses"
  90.     Say ""
  91.     exit
  92. end
  93.  
  94. /* Read Invoice Number */
  95. if open('Invoice', DataPath||Client.NameCode||".invoice", 'R') then do
  96.     cInvoice = readln('Invoice')
  97.     call close('Invoice')
  98. end
  99.  
  100. cInvoice = cInvoice + 1
  101.  
  102. Client.Invoice = right(cInvoice, 2, "0")
  103.  
  104. /* Create Invoice */
  105. call open('Out', DataPath"/TimeKeep/Invoice."Client.NameCode''Client.Invoice, 'W')
  106.  
  107. /* Invoice # */
  108. call writeln('Out', "Invoice #"Client.NameCode''Client.Invoice)
  109.  
  110. /* Client Name */
  111. 'Type' Client.Name
  112. call writeln('Out', Client.Name)
  113. call writeln('Out', "")
  114.  
  115. /* Date */
  116. call writeln('Out', date())
  117. call writeln('Out', "")
  118. call writeln('Out', "")
  119.  
  120. /* Work Description */
  121. call writeln('Out', "== WORK ===============================")
  122. call writeln('Out', "")
  123.  
  124. /* Work Description - Projects */
  125.  
  126. do lp = 1 to nProjects
  127.     if Projects.lp.Name ~= "" then do
  128.         call writeln('Out', "  "Projects.lp.Name)
  129.         call writeln('Out', "    -")
  130.     end
  131. end
  132.  
  133.  
  134. /* Expenses */
  135. TotalExpenses = 0
  136. if Expenses then do
  137.     call writeln('Out', "")
  138.     call writeln('Out', "== EXPENSES ===========================")
  139.     call writeln('Out', "")
  140.  
  141.     do lp = 1 to nProjects
  142.         if Expenses.lp.count = 0 then iterate
  143.  
  144.         call writeln('Out', "  "Projects.lp.Name)
  145.  
  146.         do lp2 = 1 to Expenses.lp.count
  147.             parse var Expenses.lp.lp2.Info '"'tInfo'","'tAmount'"'
  148.             call writeln('Out', "    "tInfo"  "tAmount)
  149.             TotalExpenses = TotalExpenses + tAmount
  150.         end
  151.     end
  152.  
  153.     call writeln('Out', "")
  154.     call writeln('Out', "    EXPENSES:  $"TotalExpenses)
  155. end
  156.  
  157.  
  158. Total = 0
  159. if Work then do
  160.     call writeln('Out', "")
  161.     /* Work Hours */
  162.     call writeln('Out', "== WORK HOURS =========================")
  163.     call writeln('Out', "")
  164.  
  165.     do lp = 1 to nProjects
  166.         if Projects.lp.count = 0 then iterate
  167.  
  168.         call writeln('Out', "  "Projects.lp.Name)
  169.  
  170.         HSubTotal = 0
  171.         do lp2 = 1 to Projects.lp.count
  172.             parse var Projects.lp.lp2.Info '"'tDate'","'tT1'","'tT2'","'tH'","'tRate'"'
  173.             call writeln('Out', "    "tDate"  "tT1"  -  "tT2"  "tH)
  174.             HSubTotal = HSubTotal + tH
  175.         end
  176.  
  177.         SubTotal = trunc(HSubTotal * tRate + .5e-2, 2)
  178.  
  179.         call writeln('Out', "      "HSubTotal" @ $"tRate" / hour:   "SubTotal)
  180.         Total = Total + SubTotal
  181.     end
  182.  
  183.     call writeln('Out', "")
  184.     call writeln('Out', "    WORK:  $"Total)
  185. end
  186.  
  187. call writeln('Out', "")
  188. call writeln('Out', "=======================================")
  189. call writeln('Out', "")
  190.  
  191. Total = Total + TotalExpenses
  192. call writeln('Out', "    TOTAL:  $"Total)
  193.  
  194. call writeln('Out', "")
  195. call writeln('Out', "=======================================")
  196. call writeln('Out', "")
  197. call writeln('Out', "Payment To:")
  198. call writeln('Out', "")
  199. call writeln('Out', "scott dhomas trenn")
  200. call writeln('Out', "797 Mitchell Street, Fredericton, NB   E3B 3S8")
  201. call writeln('Out', "(506) 459-7088")
  202. call close('Out')
  203.  
  204. /* Write Invoice Number */
  205. call open('Invoice', DataPath||Client.NameCode||".invoice", 'W')
  206. call writeln('Invoice', cInvoice)
  207. call close('Invoice')
  208.  
  209. /* Write SoFar */
  210. call open('SoFar', DataPath||Client.NameCode||".sofar", 'W')
  211. call writeln('SoFar', Quote||"  0.00"||Quote)
  212. call close('SoFar')
  213.  
  214.  
  215. /* Backup .time data file */
  216. ADDRESS COMMAND 'C:Rename' DataPath||Client.NameCode||".time" DataPath||Client.NameCode||".time."Client.Invoice
  217.  
  218. exit
  219.